home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 June: Reference Library / Dev.CD Jun 96 RL / Dev.CD Jun 96 RL.toast / Technical Documentation / develop / develop Issue 24 / develop Issue 24 code / Scriptable Database 1.0a15 / Database / TransactionAwareObject.cp < prev    next >
Encoding:
Text File  |  1996-02-19  |  7.0 KB  |  187 lines  |  [TEXT/CWIE]

  1.  
  2. #include "TransactionAwareObject.h"
  3.  
  4. #include "Transaction.h"
  5.  
  6. #include "Exceptions.h"
  7.  
  8. //--------------------------------------------------------------------------------
  9. // TTransactionBaseObject::AddReference
  10. //--------------------------------------------------------------------------------
  11. void TTransactionBaseObject::AddReference() const
  12. {
  13.     ++((TTransactionBaseObject*)this)->fReferenceCount;
  14. } // TTransactionBaseObject::AddReference
  15.  
  16. //--------------------------------------------------------------------------------
  17. // TTransactionBaseObject::RemoveReference
  18. //--------------------------------------------------------------------------------
  19. Boolean TTransactionBaseObject::RemoveReference() const
  20. {
  21.     --((TTransactionBaseObject*)this)->fReferenceCount;
  22.     
  23.     return (this->fReferenceCount == 0);
  24. } // TTransactionBaseObject::RemoveReference
  25.  
  26. //--------------------------------------------------------------------------------
  27. // TTransactionBaseObject::DisposeRecordIfUnreferenced
  28. //--------------------------------------------------------------------------------
  29. void TTransactionBaseObject::DisposeRecordIfUnreferenced()
  30. {
  31.     if(this->fReferenceCount == 0)
  32.     {
  33.         delete this;
  34.     }
  35. } // TTransactionBaseObject::DisposeRecordIfUnreferenced
  36.  
  37. //--------------------------------------------------------------------------------
  38. // TTransactionBaseObject::PrepareToCommit
  39. //--------------------------------------------------------------------------------
  40. void TTransactionBaseObject::PrepareToCommit(TTransaction* /*transaction*/)
  41. {
  42. } // TTransactionBaseObject::PrepareToCommit
  43.  
  44. //--------------------------------------------------------------------------------
  45. // TTransactionAwareObject::GrabUpdatePointer
  46. //
  47. // In time this should return a AnUpdate<TTransactionAwareObject> instead
  48. // of a TTransactionAwareObject*
  49. //--------------------------------------------------------------------------------
  50. TTransactionAwareObject* TTransactionAwareObject::GrabUpdatePointer(TTransaction* transaction) const
  51. {
  52.     REQUIREVALIDPOINTER(transaction);
  53.     
  54.     //
  55.     // If this object is not in any transaction yet,
  56.     // set up the transaction links.
  57.     //
  58.     if(this->InTransaction() == false)
  59.     {
  60.         this->SetTransaction(transaction);
  61.         transaction->Add((TTransactionAwareObject*)this);
  62.     }
  63.     //
  64.     // If this object is already in some transaction, and if that transaction
  65.     // is not the transaction that we're trying to become part of, then we fail.
  66.     //
  67.     else if(this->InTransaction(transaction) == false)
  68.         FailErr(eAlreadyInTransaction);    
  69.     
  70.     //
  71.     // Cast away our const-ness and return this object.
  72.     //
  73.     return (TTransactionAwareObject*)this;
  74. }
  75.  
  76. //--------------------------------------------------------------------------------
  77. // TTransactionAwareObject::AbstractDBRecord
  78. //--------------------------------------------------------------------------------
  79. //const 
  80. TDBRecord* TTransactionAwareObject::AbstractDBRecord() const
  81. {
  82.     Throw(eWrongDataType);
  83.     return nil;
  84. } // TTransactionAwareObject::AbstractDBRecord
  85.  
  86. //--------------------------------------------------------------------------------
  87. // TTransactionAwareObject::DBElementRecord
  88. //--------------------------------------------------------------------------------
  89. //const 
  90. TDBElement* TTransactionAwareObject::DBElementRecord() const
  91. {
  92.     Throw(eWrongDataType);
  93.     return nil;
  94. } // TTransactionAwareObject::DBElementRecord
  95.  
  96. //--------------------------------------------------------------------------------
  97. // TTransactionAwareObject::DBPropertyRecord
  98. //--------------------------------------------------------------------------------
  99. //const 
  100. TDBProperty* TTransactionAwareObject::DBPropertyRecord() const
  101. {
  102.     Throw(eWrongDataType);
  103.     return nil;
  104. } // TTransactionAwareObject::DBPropertyRecord
  105.  
  106. //--------------------------------------------------------------------------------
  107. // TTransactionAwareObject::DataRecord
  108. //--------------------------------------------------------------------------------
  109. //const 
  110. TDataRecord* TTransactionAwareObject::DataRecord() const
  111. {
  112.     Throw(eWrongDataType);
  113.     return nil;
  114. } // TTransactionAwareObject::DataRecord
  115.  
  116. //--------------------------------------------------------------------------------
  117. // AConst<TTransactionAwareObject>::AddReference
  118. //--------------------------------------------------------------------------------
  119. void AConst<TTransactionAwareObject>::AddReference() const
  120. {
  121.     if(fRecord != nil)
  122.         fRecord->AddReference();
  123. } // AConst<TTransactionAwareObject>::AddReference
  124.  
  125. //--------------------------------------------------------------------------------
  126. // AConst<TTransactionAwareObject>::RemoveReference
  127. //--------------------------------------------------------------------------------
  128. void AConst<TTransactionAwareObject>::RemoveReference() const
  129. {
  130.     if(fRecord != nil)
  131.         fRecord->RemoveReference();
  132. } // AConst<TTransactionAwareObject>::RemoveReference
  133.  
  134. //--------------------------------------------------------------------------------
  135. // AnUpdate<TTransactionAwareObject>::AddReference
  136. //--------------------------------------------------------------------------------
  137. void AnUpdate<TTransactionAwareObject>::AddReference() const
  138. {
  139.     if(fRecord != nil)
  140.         fRecord->AddReference();
  141. } // AnUpdate<TTransactionAwareObject>::AddReference
  142.  
  143. //--------------------------------------------------------------------------------
  144. // AnUpdate<TTransactionAwareObject>::RemoveReference
  145. //--------------------------------------------------------------------------------
  146. void AnUpdate<TTransactionAwareObject>::RemoveReference() const
  147. {
  148.     if(fRecord != nil)
  149.         fRecord->RemoveReference();
  150. } // AnUpdate<TTransactionAwareObject>::RemoveReference
  151.  
  152. //--------------------------------------------------------------------------------
  153. // AConst<TTransactionBaseObject>::AddReference
  154. //--------------------------------------------------------------------------------
  155. void AConst<TTransactionBaseObject>::AddReference() const
  156. {
  157.     if(fRecord != nil)
  158.         fRecord->AddReference();
  159. } // AConst<TTransactionBaseObject>::AddReference
  160.  
  161. //--------------------------------------------------------------------------------
  162. // AConst<TTransactionBaseObject>::RemoveReference
  163. //--------------------------------------------------------------------------------
  164. void AConst<TTransactionBaseObject>::RemoveReference() const
  165. {
  166.     if(fRecord != nil)
  167.         fRecord->RemoveReference();
  168. } // AConst<TTransactionBaseObject>::RemoveReference
  169.  
  170. //--------------------------------------------------------------------------------
  171. // AnUpdate<TTransactionBaseObject>::AddReference
  172. //--------------------------------------------------------------------------------
  173. void AnUpdate<TTransactionBaseObject>::AddReference() const
  174. {
  175.     if(fRecord != nil)
  176.         fRecord->AddReference();
  177. } // AnUpdate<TTransactionBaseObject>::AddReference
  178.  
  179. //--------------------------------------------------------------------------------
  180. // AnUpdate<TTransactionBaseObject>::RemoveReference
  181. //--------------------------------------------------------------------------------
  182. void AnUpdate<TTransactionBaseObject>::RemoveReference() const
  183. {
  184.     if(fRecord != nil)
  185.         fRecord->RemoveReference();
  186. } // AnUpdate<TTransactionBaseObject>::RemoveReference
  187.